#include<bits/stdc++.h>

using namespace std;

/**
 * @brief 主函数，演示动态数组的翻倍扩容算法
 *
 * 该函数创建一个初始大小为10的动态数组，并使用翻倍扩容算法处理数组空间不足的情况。
 * 在循环中，不断向数组中添加元素，当数组空间不足时，将数组大小翻倍，并将原数组元素复制到新数组中。
 *
 * @return int 程序退出状态码，通常0表示正常退出
 */
int main() {
    // 初始化数组的初始大小为10
    int n = 10;
    // 动态分配一个大小为n的整数数组，并初始化元素个数为0
    int *p = new int[n], size = 0;

    // 循环10000次，向数组中添加元素
    for (int i = 0; i < 10000; i++) {
        // 检查数组是否已满，如果已满则进行扩容
        if (size >= n) {
            // 翻倍扩容算法：将数组大小翻倍
            n <<= 1;
            // 动态分配一个新的大小为n的整数数组
            int *q = new int[n];
            // 将原数组的元素复制到新数组中
            for (int j = 0; j < n / 2; j++) q[j] = p[j];
            // 释放原数组的内存
            delete[] p;
            // 将指针p指向新数组
            p = q;
        }
        // 将当前元素添加到数组中，并更新元素个数
        p[size++] = i;
    }
    // 释放最后一次分配的数组内存，避免内存泄漏
    delete[] p;
    // 返回程序退出状态码
    return 0;
}